package com.sinog.biz.mapper.havexml;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sinog.core.domain.SystemCode;
import com.sinog.core.model.SystemCodeVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

/**
 * @desc SystemCodeMapper
 * @author -
 * @date 2020-01-19-14:42
 */
public interface SystemCodeMapper extends BaseMapper<SystemCode> {

    /**
     * 罪名编码critypeCode、职业技能jineng critypeCode 2_12 职业技能：jineng  4_1
     * @param type type
     * @return List<Map < String,Object>>
     */
    List<Map<String,Object>> getCodeIdAndName(@Param("type") String type);

    /**
     * 罪名分类编码fzlx keyName：fzlx ，code_type：2_12
     * @param type type
     * @return List<Map < String,Object>>
     */
    List<Map<String,Object>> getCritypeCodeP(@Param("type") String type);
    //************************************************************************************************
    //*********************************上面方法用于redis缓存初始化***************************************
    //************************************************************************************************

    /**
     * 根据code_type查询tbsys_code的code_id和code_name
     * @param codeType codeType
     * @return List<SystemCode>
     */
    List<SystemCode> getComboboxData(String codeType);

    /**
     * 根据code_type和code_id查询tbsys_code
     * @param map map
     * @return SystemCode
     */
    SystemCode getCodeByMap(Map<String,String> map);

    /**
     * 根据code_type和code_Id查询code_Id和code_type
     * @param codeType codeType
     * @param codeId codeId
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> getCodeByCodeId(String codeType,String codeId);

    /**
     * 衔接 - 信息录入 - 查询职业技能详情
     * @param codeType codeType
     * @param pcodeId pcodeId
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> getCodeByPcodeId(String codeType,String pcodeId);

    /**
     * 获取罪名list，可以进行模糊查询
     * @param page page
     * @param codeType codeType
     * @param codeId codeId
     * @param queryKey queryKey
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> getZuiMingList(
            @Param("param") Page<Map<String,String>> page,
            @Param("codeType") String codeType,@Param("codeId") String codeId,@Param("queryKey") String queryKey);

    /**
     * 获取全部的罪名list，存入redis中，
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> getAllZuiMingList();

    /**
     * 查询tbsys_code编码
     * @param codeType 编码类型
     * @param pcodeId 父级编码  0 不启用   99表示不等于-1
     * @param sn 是否排序：-1 不排序 0 desc 1 asc
     * @return List<Map < String,String>>
     */
    List<Map<String,Object>> getTbsysCode(
            @Param("codeType") String codeType,@Param("pcodeId") String pcodeId,@Param("sn") String sn);

    /**
     * 填写信息
     * @param cids cids
     * @return List<Map>
     */
    List<Map<String, String>> getCodeNameByCodeId(List<String> cids);

    /**
     * 获取服刑信息的附加刑
     * @param idsList idsList
     * @return List<String>
     */
    List<String> getAddpenaltyName(List<String> idsList);

    /**
     * 查询当前省的(省-市-区-县)
     * @param localCode localCode
     * @return List<SystemCodeVo>
     */
    List<SystemCodeVo> searchByCode(@Param("localCode") String localCode);

    /**
     * 删除本地库中tbsys_code记录
     * @param codeId codeId
     * @return Integer
     */
    Integer deleteTbsysCodeByCode(@Param("codeId") String codeId);

    /**
     * 获取tbsys_code表最大id值
     * @return Integer
     */
    Integer getTbsysCodeMaxId();

    /**
     * 全国行政区划编码名称
     * 查询tbsys_code表全部code_id和pcode_id
     * @return List<Map < String,Object>>
     */
    List<Map<String,Object>> getAreaCodeAndPcode();

    /**
     * 查询全部罪名ID
     * @return List<String>
     */
    List<String> getCodeIds();
    //************************************************************************************************
    //*********************************上面方法用于redis缓存初始化***************************************
    //************************************************************************************************

    /**
     * 根据code_id查询tbsys_code的code_name
     * @param code code
     * @return String
     */
    String getNameByCode(String code);

    /**
     * 根据code_id查询tbsys_code
     * @param codeType codeType
     * @param code code
     * @return SystemCode
     */
    SystemCode getByCode(@Param("codeType") String codeType,@Param("code") String code);

    /**
     * 填写信息
     * @param list list
     * @return List<String>
     */
    List<String> selectAreaStr(List<String> list);

    /**
     * 户籍迁出获取街道
     * @param parentCode parentCode
     * @param priNum priNum
     * @return List<SystemCode>
     */
    List<SystemCode> selectQcByMap(@Param("parentCode") String parentCode,@Param("priNum") String priNum);

    /**
     * 安置帮教管理 - 业务协调 - 业务协调 - 回显抄送单位
     * @param departId 机构编码
     * @return List<SystemCode>
     */
    List<SystemCode> getDepartmentCoordinate(String departId);

    /**
     * 根据IDS 获取罪名
     * @param codeIds codeIds
     * @return List<String>
     */
    List<String> getCodeNameByCodeIds(@Param("codeIds") List<String> codeIds);

    /**
     * 犯罪类型code码查询
     * @param codeType codeType
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> getSearchCodeResoult(@Param("codeType") String codeType);

    /**
     * 行政单位查询
     * @param codeType codeType
     * @param pcodeId pcodeId
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> getSearchCodeNativeResoult(@Param("codeType") String codeType,@Param("pcodeId") String pcodeId);

    /**
     * 街道代码查询
     * @param pcodeId pcodeId
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> getSearchCodeJiedDaoResoult(String pcodeId);

    /**
     * 根据CodeName获取字典信息
     * @param mapCode mapCode
     * @param name 地区名
     * @return List<SystemCode>
     */
    List<SystemCode> getTbsysCodeByCodeName(@Param("mapCode") String mapCode,@Param("name") String name);

    /**
     * 根据pCode获取字典信息
     * @param mapCode mapCode
     * @param name 地区名
     * @return List<SystemCode>
     */
    List<SystemCode> getTbsysCodeByPcodeId(@Param("mapCode") String mapCode,@Param("name") String name);

    /**
     * 获取mapcode下的所有子地区的code
     * @param mapCode 区划编码
     * @return List<String>
     */
    List<String> getChildCodesByPcode(String mapCode);

    /**
     * 数据统计分析 - 多维数据检索 - 多维数据检索 - 获取省份信息
     * @param loginUserDepartId loginUserDepartId
     * @return List<Map < String,Object>>
     */
    List<Map<String,Object>> getProvince(@Param("loginUserDepartId") String loginUserDepartId);

    /**
     * 获取子id和名字
     * @param departid departid
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> selectChilds(@Param("departid") String departid);
    /**
     * 获取所有下级单位数量
     * @param departid 部门编码
     * @return 下级单位数量
     */
    Integer selectAllChilds(@Param("departid") String departid);

    /**
     * 获取所有的省份
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> getProvinceAll();

    /**
     * 根据部门id查询部门名称
     * @param departId 部门id
     * @return Map<String,String>
     */
    Map<String,String> getDepartNameByDepartId(String departId);

    /**
     * 处理脏数据，根据行政区划名称和pcodeId查询行政区划id
     * @param codeName 行政区划名称
     * @param pcodeId pcodeId
     * @return codeId
     */
    String getCodeIdByCodeName(@Param("codeName") String codeName,@Param("pcodeId") String pcodeId);

    /**
     * 根据code_id和pcode_id更新tbsys_code表
     * @param systemCode systemCode
     * @param paramMap paramMap
     * @return int
     */
    int updateSystemCode(@Param("systemCode") SystemCode systemCode,@Param("paramMap")Map<String,String> paramMap);

    /**
     * 获取省市县锁定信息
     * @param codeId codeId
     * @param departid departid
     * @return Map<String,Object>
     */
    Map<String,Object> getAddressLocking(String codeId,String departid);

    /**
     * 查询所有的tbsys_code
     * @return List<SystemCode>
     */
    List<SystemCode> selectAll();
}